package sgsi.controller.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import sgsi.controller.dao.AlarmaDao;
import sgsi.model.entidades.alarmas.Alarma;
import sgsi.model.entidades.alarmas.AlarmaDeCapacidad;
import sgsi.model.entidades.alarmas.AlarmaDeVencimiento;

public class AlarmaDaoHibernateImpl extends HibernateDaoSupport implements AlarmaDao {

	private static final String BUSCAR_TODOS_CAPACIDAD = "select a from AlarmaDeCapacidad a where a.estaBorrado is false and a.nombre like ";
	private static final String BUSCAR_TODOS_VENCIMIENTO = "select a from AlarmaDeVencimiento a where a.estaBorrado is false and a.nombre like ";
	private static final String BUSCAR_CODIGO_CAPACIDAD = "select a from AlarmaDeCapacidad a where a.estaBorrado is false and a.codigoAlarma = ";
	private static final String BUSCAR_CODIGO_VENCIMIENTO = "select a from AlarmaDeVencimiento a where a.estaBorrado is false and a.codigoAlarma = ";
	
	@SuppressWarnings("unchecked")
	public List<AlarmaDeCapacidad> obtenerTodosBusquedaCapacidad(String nombre) {
		String newQuery = BUSCAR_TODOS_CAPACIDAD + "'%" + nombre + "%'";
		return getHibernateTemplate().find(newQuery);
	}
	
	@SuppressWarnings("unchecked")
	public List<AlarmaDeVencimiento> obtenerTodosBusquedaVencimiento(String nombre) {
		String newQuery = BUSCAR_TODOS_VENCIMIENTO + "'%" + nombre + "%'";
		return getHibernateTemplate().find(newQuery);
	}

	public AlarmaDeCapacidad obtenerPorCodigoCapacidad(int codigo) {
		String newQuery = BUSCAR_CODIGO_CAPACIDAD + codigo;
		if (getHibernateTemplate().find(newQuery).isEmpty()) {
			return null;
		}
		return (AlarmaDeCapacidad) getHibernateTemplate().find(newQuery).get(0);
	}

	public AlarmaDeVencimiento obtenerPorCodigoVencimiento(int codigo) {
		String newQuery = BUSCAR_CODIGO_VENCIMIENTO + codigo;
		if (getHibernateTemplate().find(newQuery).isEmpty()) {
			return null;
		}
		return (AlarmaDeVencimiento) getHibernateTemplate().find(newQuery).get(0);
	}

	public AlarmaDeVencimiento guardar(AlarmaDeVencimiento alarma) {
		getHibernateTemplate().saveOrUpdate(alarma);
		return alarma;
	}

	public AlarmaDeCapacidad guardar(AlarmaDeCapacidad alarma) {
		getHibernateTemplate().saveOrUpdate(alarma);
		return alarma;
	}

	public void eliminar(Alarma alarma) {
		getHibernateTemplate().delete(alarma);
	}
}
